Interface and Application Programming

Assignment for week 16


  • Write an application that interfaces with an input &/or output device that you made.

Introduction

In this assignment I made Interface application using the Ultrasonic Sensor "HC-SR04" in the Input board I have designed.

Coding

I used Processing programming language which I found out it is very simple after I watched some turorials on the official website .

Processing Code

                                          /* The following Processing Sketch was created by ScottC on
                       the 10 Nov 2012 : http://arduinobasics.blogspot.com/

                       Inspired by this Processing sketch by Daniel Shiffman:
                       http://processing.org/learning/basics/sinewave.html

                      */
                      import processing.serial.*;


                      int numOfShapes = 60; // Number of squares to display on screen
                      int shapeSpeed = 2; // Speed at which the shapes move to new position
                       // 2 = Fastest, Larger numbers are slower

                      //Global Variables
                      Square[] mySquares = new Square[numOfShapes];
                      int shapeSize, distance;
                      String comPortString;
                      Serial myPort;

                      /* -----------------------Setup ---------------------------*/
                      void setup(){
                       size(displayWidth,displayHeight); //Use entire screen size.
                       smooth(); // draws all shapes with smooth edges.

                       /* Calculate the size of the squares and initialise the Squares array */
                       shapeSize = (width/numOfShapes);
                       for(int i = 0; i0; i--){
                       /* Use the previous square's position as a target */
                       targetY=mySquares[i-1].getY();
                       oldY=mySquares[i].getY();

                       if(abs(oldY-targetY)<2){
                       newY=targetY; //This helps to line them up
                       }else{
                       //calculate the new position of the square
                       newY=oldY-((oldY-targetY)/shapeSpeed);
                       }
                       //Set the new position of the square
                       mySquares[i].setY(newY);

                       /*Calculate the colour of the square based on its
                       position on the screen */
                       blueVal = int(map(newY,0,height,0,255));
                       redVal = 255-blueVal;
                       fill(redVal,0,blueVal);

                       /* Draw the square on the screen */
                       rect(mySquares[i].getX(), mySquares[i].getY(),shapeSize,shapeSize);
                       }
                      }

                      /* ---------------------sketchFullScreen---------------------------*/
                      // This puts processing into Full Screen Mode
                      boolean sketchFullScreen() {
                       return true;
                      }

                      /* ---------------------CLASS: Square ---------------------------*/
                      class Square{
                       int xPosition, yPosition;

                       Square(int xPos, int yPos){
                       xPosition = xPos;
                       yPosition = yPos;
                       }

                       int getX(){
                       return xPosition;
                       }

                       int getY(){
                       return yPosition;
                       }

                       void setY(int yPos){
                       yPosition = yPos;
                       }
                      }


                  

Input board's code

                                        /*


                     This sketch originates from Virtualmix: http://goo.gl/kJ8Gl
                     Has been modified by Winkle ink here: http://winkleink.blogspot.com.au/2012/05/arduino-hc-sr04-ultrasonic-distance.html
                     And modified further by ScottC here: http://arduinobasics.blogspot.com.au/2012/11/arduinobasics-hc-sr04-ultrasonic-sensor.html
                     on 10 Nov 2012.
                     */


                     #include 
                     SoftwareSerial mySerial (0,2);

                     #define echoPin 4 // Echo Pin
                     #define trigPin 3 // Trigger Pin


                     int maximumRange = 200; // Maximum range needed
                     int minimumRange = 0; // Minimum range needed
                     long duration, distance; // Duration used to calculate distance

                     void setup() {
                      mySerial.begin (9600);
                      pinMode(trigPin, OUTPUT);
                      pinMode(echoPin, INPUT);

                     }

                     void loop() {
                     /* The following trigPin/echoPin cycle is used to determine the
                      distance of the nearest object by bouncing soundwaves off of it. */
                      digitalWrite(trigPin, LOW);
                      delayMicroseconds(2);

                      digitalWrite(trigPin, HIGH);
                      delayMicroseconds(10);

                      digitalWrite(trigPin, LOW);
                      duration = pulseIn(echoPin, HIGH);

                      //Calculate the distance (in cm) based on the speed of sound.
                      distance = duration/58.2;

                      if (distance >= maximumRange || distance <= minimumRange){
                      /* Send a negative number to computer and Turn LED ON
                      to indicate "out of range" */
                      mySerial.println("-1");
                      digitalWrite(LEDPin, HIGH);
                      }
                      else {
                      /* Send the distance to the computer using Serial protocol, and
                      turn LED OFF to indicate successful reading. */
                      mySerial.println(distance);
                      digitalWrite(LEDPin, LOW);
                      }

                      //Delay 50ms before next reading.
                      delay(50);
                     }